/** 检测是否是空 (null、undefined、'') 
 * @param {any} value 待检测值
 * @returns {boolean} true 或者 false
 */
export const isEmpty = (value: any): boolean => {
    return value === '' || value === null || value === undefined
}
/** 判断参数的类型是否是数值类型
 * @param {any} value 待检测的类型
 * @returns {boolean} true 或者 false
 */
export const isNumber = (value: any): boolean => {
    if (isNaN(value)) {
        return false
    }
    if (value !== 0 && !value) {
        return false
    }
    return true
}
/** 检测是否是字符串
 * @param {any} value 待检测值
 * @returns {boolean} true 或者 false
 */
export const isString = (value: any): boolean => {
    if (!value && value !== '') {
        return false
    }
    if (typeof value !== 'string') {
        return false
    }
    return true
}
/**  检测是否是JSON
 * @param {any} value 待检测值
 * @returns {boolean} true 或者 false
 */
export const isJSON = (str: any): boolean => {
    if (typeof str == 'string') {
        try {
            var obj = JSON.parse(str);
            if (typeof obj == 'object' && obj) {
                return true;
            } else {
                return false;
            }
        } catch (e) {
            return false;
        }
    }
    return false
}
/** 检测是否是数组
 * @param {any} value 待检测值
 * @returns {boolean} true 或者 false
 */
export const isArray = (value: any): boolean => {
    if (!value)
        return false

    if (value instanceof Array)
        return true

    return Array.isArray(value)
}
/** 检测是否是对象
 * @param {any} value 待检测值
 * @returns {boolean} true 或者 false
 */
export const isObject = (value: any): boolean => {
    if (!value)
        return false

    if (typeof value === 'string')
        return false

    return true
}
/** 自定义正则检测值
 * @param {string} reg 校验正则
 * @param {any} value  待检测值
 * @returns {boolean} 正则校验结果 true 或者 false
 */
export const regexpCheck = (reg: string, value: any): boolean => {
    return new RegExp(reg).test(value)
}
/** 自定义正则检测值并回调自定义提示消息
 * @param {string} reg
 * @param {any} value 待检测值
 * @param {string} msg 提示消息
 * @return {Promise<any>} Promise 异步回调 
 */
export const regexpPromiseMsg = (reg: string, value: any, msg: string): Promise<any> => {
    return isEmpty(value) ? Promise.resolve() : regexpCheck(reg, value) ? Promise.resolve() : Promise.reject(msg)
}
/** 检测一个类型是否是包装类型
 * @param { T } sourceObj 待检测类型
 * @returns {boolean} 正则校验结果 true 或者 false
 */
export const isWrapObj = <T>(sourceObj: T): boolean => {
    if (sourceObj instanceof Number || sourceObj instanceof String || sourceObj instanceof Boolean || sourceObj instanceof Symbol) {
        return true
    }
    return false
}

/**
 * 判断指定属性名是否存在于对象中
 * @param key 属性名
 * @param obj 目标对象
 * @returns {boolean} true 表示属性存在，false 表示属性不存在
 */
export const isObjInProVail = (key: string, obj: any)=> {
  return key in obj // true表示key在对象中，false为不在对象中
}

